Simulation is often used to approximate natural phenomena, such as the laws of physics, in software applications. For example, games often simulate real world experiences, such as racing, flying, and so forth. Simulation typically involves a complex software model designed to mimic behavior of a physical system. Software applies Inputs to the model similar to real world inputs. For example, a gravity simulator may receive inputs about the mass of an object, its aerodynamic properties, one or more forces applied to the object, and so forth.
Simulation can also be useful in user interface animation to increase the reality of interacting with objects experienced by users of the interface. For example, folders that animate from one location to another are easier to understand than those that simply disappear and reappear at another location. One type of user interface animation is a “bounce,” which refers to the desirability of an object having some amount of elasticity as it moves from one location to another. For example, a software designer may want an object dragged from one location to another to bounce at the destination as it would if physically dropped. The bounce calls the user's attention to the object's new location and gives the object a more realistic feel, making the interface more pleasing to use.
Unfortunately, typical simulations are difficult to use for user interface animation and similar applications. It is often not feasible to setup and run a complex model that includes state information stored over time. The requirements of such models are resource intensive and do not allow for starting the simulation in the middle or even running the simulation in reverse. Rather, such models often are designed to run from start to finish uninterrupted. Animation for a user interface is typically more declarative, in that an application author knows a from and to value and wants an animation to occur for values in between. Such animations are more difficult than simple linear interpolation.